import { message } from "antd"
import axios from "axios"

const baseUrl='http://121.89.205.189:3000/admin'
const devBaseUrl='http://10.31.155.245:3000/admin'
// 获取环境变量，判断开发环境还是生产环境或者是测试环境
//development  production(即是测试环境又是生产环境) 
const isDev=process.env.NODE_ENV==="development"

const request=axios.create({
    // 开发环境是后端程序员电脑的ip地址，生产环境是云服务器的域名
    baseURL:isDev?devBaseUrl:baseUrl,
    // 配置请求超时时间
    timeout:60000
})

// 请求拦截器
request.interceptors.request.use((config)=>{
    // 发送数据请求之前的要做的事情
    const userInfo=  JSON.parse(localStorage.getItem("userInfo") ||'{}')
    // console.log(userInfo.token);
    if(userInfo){
        config.headers.token=userInfo.token
    }
    return config
})

//响应拦截器
request.interceptors.response.use((response)=>{
    // console.log(response);
    // 响应数据请求之后的要做的事情
    // token会在长时间不使用情况下失效，失效之后需要重新登录获取，
    // 重新进入登录页面
    if(response.data.code=="10119"){
        message.error('登录已过期,请重新登录,token失效')
        // 清空用户所有数据
        localStorage.clear()
        // 跳转到登录页面(修改了地址栏)
        window.location.href='/#/login'
    }
    return response.data
})

// 封装数据请求的方法 ajax全称异步JavaScript和XML
export default function ajax(config){
    // 获取请求的必要参数，分别是url,method,data,headers，即请求地址，方式，参数，请求头
    // 解构
    const {url='',method='Get',data={},headers={}} =config

    switch(method.toUpperCase()){
        case 'GET':
            return request.get(url,{params:data})
        case 'POST':
            if(headers['Content-Type']=='application/x-www-form-urlencoded'){
                // 这是表单数据提交，将json数据序列化，格式化一次
                const obj=new URLSearchParams()
                for(const key in data){
                    obj.append(key,data[key])
                }
                return request.post(url,obj,{headers})
            }
            if(headers['Content-Type']=='multipart/form-data'){
                // 这是文件数据提交，将json数据序列化，格式化一次
                const obj=new FormData()
                for(const key in data){
                    obj.append(key,data[key])
                }
                return request.post(url,obj,{headers})
            }

            // 普通的json数据
            return request.post(url,data)
            
        case 'PUT':
            return request.put(url,data)
        case 'DELETE':
            return request.delete(url,{data:data})
        default:
            // 前面匹配都不成立，交给axios自己处理
            return request.request(config)
    }
}

